home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / grafix / 3d / scalekey.lha / ScaleKey / SK_PC.C < prev   
Encoding:
C/C++ Source or Header  |  1995-01-15  |  3.5 KB  |  193 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <string.h>
  5.  
  6. FILE *in,*out;
  7. char infile[20],outfile[20];
  8. char temp[20]="sk.$$$";
  9. int SourceFrames,DestFrames;
  10. char buffer[1000];
  11. char t[40],t1[40];
  12.  
  13. void parse_args(int argc, char *argv[]);
  14. void print_usage(void);
  15. int getline(char *s, FILE *f);
  16. void Getword(char *s, char *t);
  17. void writeword(char *s);
  18. void writenumber(int n);
  19.  
  20. int main(int argc, char *argv[])
  21. {
  22.  int sf,df,sft,dft,l,f;
  23.  int len=0;
  24.  float ratio;
  25.  
  26.  parse_args(argc, argv);
  27.  if ((in=fopen(infile,"rt"))==NULL) {
  28.   printf("Cannot open input file %s\n",strupr(infile));
  29.   exit(1);
  30.  }
  31.  if ((out=fopen(temp,"wt"))==NULL) {
  32.   printf("Error opening temp file.\n");
  33.   exit(1);
  34.  }
  35.  getline(buffer,in);
  36.  Getword(buffer,t);
  37.  if (strcmp(t,"STAGE")!=0) {
  38.   printf("Input file is not Imagine Staging Language file.\n");
  39.   fclose(out);
  40.   fclose(in);
  41.   remove(temp);
  42.   exit(1);
  43.  }
  44.  writeword(t);
  45.  fputc('\n',out);
  46.  getline(buffer,in);
  47.  Getword(buffer,t);
  48.  writeword(t);
  49.  Getword(buffer,t);
  50.  SourceFrames=atoi(t);
  51.  writenumber(DestFrames);
  52.  fputc('\n',out);
  53.  ratio=(float)DestFrames/(float)SourceFrames;
  54.  f=(ratio<1) ? 1 : 0;
  55.  while (!feof(in))
  56.  {
  57.  getline(buffer,in);
  58.  while(buffer[0]!='\n') {
  59.   Getword(buffer,t);
  60.   if (strcmp(t,"FRAMES")==0) {
  61.    writeword(t);
  62.    Getword(buffer,t);
  63.    Getword(buffer,t1);
  64.    sf=atoi(t);
  65.    df=atoi(t1);
  66.    l=df-sf;
  67.    if (sf!=1&&df!=1)
  68.    {
  69.     sft=len+1;
  70.     dft=ceil(df*ratio);
  71.     if (dft>DestFrames) dft=DestFrames;
  72.     if (dft==DestFrames)
  73.      len=0;
  74.     else
  75.      len=dft;
  76.    }
  77.    else if(sf==1)
  78.    {
  79.     sft=sf;
  80.     dft=ceil(df*ratio);
  81.     if (dft>DestFrames) dft=DestFrames;
  82.     if (dft==DestFrames)
  83.      len=0;
  84.     else
  85.      len=dft;
  86.    }
  87.    else if(sf==1&&df==1)
  88.    {
  89.     sft=1;
  90.     dft=1;
  91.     if (dft==DestFrames)
  92.      len=0;
  93.     else
  94.      len=1;
  95.    }
  96.    writenumber(sft);
  97.    writenumber(dft);
  98.   }
  99.   else
  100.    writeword(t);
  101.  }
  102.  fputc('\n',out);
  103.  }
  104.  fclose(in);
  105.  fclose(out);
  106.  if (strcmp(infile,outfile)==0)
  107.  {
  108.   remove(infile);
  109.   rename(temp,outfile);
  110.  }
  111.  else
  112.  {
  113.   remove(outfile);
  114.   rename(temp,outfile);
  115.   remove(temp);
  116.  }
  117.  free(t);
  118. }
  119.  
  120. void parse_args(int argc, char *argv[])
  121. {
  122.  printf("\nScaleKey utility for Imagine using Imaging Staging Language.\n");
  123.  printf("Version 1.0 Copyright (C) 1995 Andrey Zmievskiy. Jan 1995\n\n");
  124.  
  125.  if (argc<3) {
  126.   print_usage();
  127.  }
  128.  strcpy(infile,"");
  129.  strcpy(outfile,"");
  130.  strcpy(infile,argv[1]);
  131.  if (argv[2][0]=='-') {
  132.   DestFrames=atoi(&argv[2][1]);
  133.   strcpy(outfile,infile);
  134.   return;
  135.  }
  136.  strcpy(outfile,argv[2]);
  137.  if (argv[3][0]=='-') {
  138.   DestFrames=atoi(&argv[3][1]);
  139.   if (DestFrames<2) {
  140.    printf("You cannot use numbers less than 2 for frames.\n");
  141.    exit(1);
  142.   }
  143.  }
  144.  else
  145.   print_usage();
  146. }
  147.  
  148. void print_usage(void)
  149. {
  150.    printf("Usage:     scalekey <filename> [outputfile] -<number of frames>\n");
  151.    printf("Input filename should be staging file in ASCII format.\n");
  152.    printf("Ex: scalekey stage stage.1 -180\n");
  153.    exit(1);
  154. }
  155.  
  156. int getline(char *s, FILE *f)
  157. {
  158.  fgets(s,256,f);
  159. }
  160.  
  161. void Getword(char *s, char *tmp)
  162. {
  163.   int i=0;
  164.   int k;
  165.   int j=0;
  166.  
  167.   while (s[i]==' ') {
  168.    for(k=0;s[k]!='\n'; k++)
  169.     s[k]=s[k+1];
  170.   }
  171.   while(s[i]!=' '&&s[i]!='\n')
  172.   {
  173.    tmp[j++]=s[i];
  174.    for(k=i;s[k]!='\n';k++)
  175.     s[k]=s[k+1];
  176.   }
  177.   tmp[j]='\0';
  178. }
  179.  
  180. void writeword(char *s)
  181. {
  182.  fputs(s,out);
  183.  fputc(' ',out);
  184. }
  185.  
  186. void writenumber(int n)
  187. {
  188.  char s[20];
  189.  
  190.  itoa(n,s,10);
  191.  fputs(s,out);
  192.  fputc(' ',out);
  193. }